package main

import "fmt"

//golang中数组是值类型
func main() {
	nums := [3]int32{1, 2, 3}
	test(nums)
	for _, v := range nums {
		fmt.Println(v)
	}

	test2(&nums)
	for _, v := range nums {
		fmt.Println(v)
	}
}

//需要注意，数组的长度是数组类型的一部分，也即 [3]int32和[4]int32完全是不同的类型
//因此一个[4]int32的数组是无法作为参数传递给test方法使用的
func test(nums [3]int32) {
	nums[0] = 100 //数组是值类型，默认为值传递，因为这里的修改只会影响test函数的栈区
	for _, v := range nums {
		fmt.Println(v)
	}
}

//通过指针进行引用传递，修改第一个元素的值
func test2(numsPointer *[3]int32) {
	//需要注意，这里不是  *numsPointer[0] 而是 (*numsPointer)[0]
	//前者是 numsPointer[0]是一个指针，后者是 numsPointer是一个指针
	(*numsPointer)[0] = 1000
	for _, v := range *numsPointer {
		fmt.Println(v)
	}
}

// //以下这种形参不允许
// func test3(nums [...]int32) {

// }
